#include "fifo.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_FRAMES 100

/**
 * 函数：模拟FIFO（先进先出）页面置换算法。
 *
 * @param queue_frames 一个字符串，表示页面访问序列。
 *                     字符串中的每个字符是一个数字，表示一个页面号。
 * @param num_frames   页框的数量，表示物理内存中可用的页框数。
 */
void
fifo_page_replacement (char *queue_frames, int num_frames)
{
  // TODO
  int frames[num_frames];
  for (int i = 0; i < num_frames; i++) {
      frames[i] = -1;
  }

  int oldest = 0;
  char *token = strtok(queue_frames, ",");
  while (token != NULL) {
      int page = atoi(token);
      int found = 0;
      for (int i = 0; i < num_frames; i++) {
          if (frames[i] == page) {
              found = 1;
              break;
          }
      }

      if (!found) {
          frames[oldest] = page;
          oldest = (oldest + 1) % num_frames;
      }

      printf("Access:%d,Frames: [", page);
      for (int i = 0; i < num_frames; i++) {
          if (i > 0) printf(",");
          printf("%d", frames[i]);
      }
      printf("]\n");

      token = strtok(NULL, ",");
  }
}
